TSJS 的超集,支持所有 JS 的特性,并提供的安全类型支持。

当下在日常开发中与平时书写 demo 时,更多时候会用上 TS

但是 Node.js 不能直接执行 TypeScript,需要提前做一些处理。

下面分场景介绍多种解决方案 (主要以 0 配置的工具为主):

最后再补充一些知识,介绍文中提到的相关库/工具,用于测试的代码如下。

ts enum Fruit { apple = 1, orange = 2 } const fruit: number = Fruit.apple console.log(fruit)

1 编译为 js

最常见的就是将 TS 编译为 js 再通过 Node 执行,在实际生产环境中大部分情况下也是编译的方式,下面介绍几个支持 0 配置开箱即用的。

1.1 tsc

TS 官方提供的一个 CLI 工具。

① 安装依赖

sh npm i typescript

② 执行编译

sh tsc index.ts

可以将执行添加到 package.json scripts 中。

json "tsc:compile": "tsc index.ts"

然后通过 npm run 执行对应指令。

sh npm run tsc:compile

下面是运行示例,

当然还可以通过 npx 调用。

sh npx tsc index.ts

PS:后续的示例都将会执行指令以 npm 命令的形式写入到 package.json

1.2 ncc

ncc 是一个简单的 CLI,可以将 Node.js 项目编译为单个文件。

① 安装依赖

sh npm i @vercel/ncc

② 执行编译

sh ncc build ./index.ts

下面是运行示例。

1.3 tsup

基于 esbuild 实现的 0 配置 TS 打包工具。

PS:esbuild 是使用 Go 编写的一个 Web 场景的构建工具

① 安装依赖

sh npm i tsup

② 执行编译

sh tsup ./index.ts

下面是运行示例。

1.4 Bun

logo:一个可爱的包子

Bun 是一个极快的 JavaScript 运行时。

all-in-one:支持运行、测试、转译和打包 JavaScript 和 TypeScript 项目

本小节介绍一下 build 功能。

① 安装 Bun

```sh

shell安装

curl -fsSL https://bun.sh/install | bash

通过 npm 安装

npm install -g bun ```

② 执行 build

sh bun build ./index.ts --outdir ./

2 加载自定义文件类型

Node.js 中可以通过自定义 module.Module._extensions 的值来实现加载自定义的文件类型的功能。

咱们可以定义 .ts 文件的支持,下面是示例代码 ts-register.js

```ts const ts = require('typescript') // 导入 TypeScript 编译器 const fs = require('fs') // 导入文件系统模块

// 自定义 .ts 文件的加载器 require.extensions['.ts'] = function (module, filename) { const content = fs.readFileSync(filename, 'utf8') // 读取文件内容 const compiled = ts.transpileModule(content, { // 编译 TypeScript 代码 compilerOptions: { module: ts.ModuleKind.CommonJS } }) module._compile(compiled.outputText, filename) // 执行编译后的代码 } ```

同时可以通过 -r 参数指定预加载的模块或执行的文件,

因此两者结合就可以直接运行 TS 文件。

sh node -r ./ts-register.js index.ts

接下来将介绍的一些直接运行 TS 的 CLI 工具也大多是这个原理。

3 CLI 工具

一些基于第三方 TS 编译工具封装的 Node CLI 工具也可以直接运行 TS,

下面介绍几个常用的,同时 这些CLI工具都使用全局依赖的形式安装

3.1 ts-node

ts-node 是 Node.js 的 TypeScript 执行引擎和 REPL。

① 安装依赖

sh npm install -g typescript npm install -g ts-node

② 运行

sh ts-node ./index.ts

3.2 tsx

支持直接执行 TypeScript:基于 esbuild 增强的 Node.js 实现,速度更快。

① 安装依赖

sh npm i -g tsx

② 运行

sh tsx index.ts

3.3 swno

SWC 驱动的 TS 运行时。

PS:SWC (Speedy Web Compiler) 是使用 Rust 编写的极快的 TypeScript / JavaScript 编译器

① 安装依赖

sh npm i -g swno

② 运行

sh swno index.ts

4 TS 运行时

JavaScript 运行时除了 Node.js 外还有其它的,下面介绍另外 2 个当下比较流行的 JS 运行时,同时它们也是 TS 运行时。

4.1 Deno

Deno 的标志是一只恐龙,emm 好几种读法,其中读 dino(滴No) 的比较多

由 Node 之父 Ryan Dahl 打造,由于 Node.js 存在很多历史问题,所以准备从 0-1 打造一个替代品,Deno 刚好就是 Node 字母的重新组合 Node = no + de

① 安装 (通过 Shell 直接安装)

sh curl -fsSL https://deno.land/x/install/install.sh | sh

添加环境变量 .zshrc

sh export DENO_INSTALL="/Users/sugar/.deno" export PATH="$DENO_INSTALL/bin:$PATH"

② 运行 TS

sh deno run index.ts

4.2 Bun

Bun 的 logo 是一个可爱的包子,前面已经简单介绍过了,目标是准备做一个 JS/TS生态下 all-in-one 的工具。

速度吊打当前的 DenoNode

运行 TS 的方式也很简单直接。

sh bun index.ts

小结

TypeScript 是当下最流行的变成语言之一,本节内容分类介绍了多种通过 Node.js 运行 TS 的方法:

针对不同的场景,合理运用上面的工具,可以极大的提高开发效率。